/**
 * 云开发管理类
 */
export default class CloudManager {
  constructor() {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
      return
    }
    
    // 初始化云开发
    wx.cloud.init({
      env: 'your-env-id', // 需要替换为实际的云开发环境ID
      traceUser: true
    })

    this.db = wx.cloud.database()
    this.scores = this.db.collection('scores')
  }

  /**
   * 上传分数
   * @param {number} score - 玩家得分
   * @param {number} distance - 行进距离
   * @param {number} waves - 通过的波次
   * @returns {Promise} 上传结果
   */
  async uploadScore(score, distance, waves) {
    try {
      const result = await this.scores.add({
        data: {
          score,
          distance,
          waves,
          createTime: this.db.serverDate()
        }
      })
      return result
    } catch (err) {
      console.error('上传分数失败：', err)
      return null
    }
  }

  /**
   * 获取排行榜
   * @param {number} limit - 返回的记录数量
   * @returns {Promise} 排行榜数据
   */
  async getLeaderboard(limit = 50) {
    try {
      const result = await this.scores
        .orderBy('score', 'desc')
        .limit(limit)
        .get()
      return result.data
    } catch (err) {
      console.error('获取排行榜失败：', err)
      return []
    }
  }

  /**
   * 获取玩家最高分
   * @returns {Promise} 最高分数据
   */
  async getPersonalBest() {
    try {
      const result = await this.scores
        .where({
          _openid: '{openid}' // 云开发会自动替换为当前用户openid
        })
        .orderBy('score', 'desc')
        .limit(1)
        .get()
      return result.data[0] || null
    } catch (err) {
      console.error('获取个人最高分失败：', err)
      return null
    }
  }
}